When a software application runs on a computing device, a processor executes machine-level instructions into which high level source code of the application has been translated (e.g., by a compiler). The pre-defined set of machine-level instructions that a particular processor can execute is the processor's instruction set. The processor typically fetches the machine-level instructions corresponding to the functionality of a software application from memory and then executes the instructions.
During execution of a software application, the operating system may allocate memory to an executing process using a memory allocation mechanism. Memory allocation mechanisms allocate an amount of memory (e.g., a block of memory locations, where the size of the block of memory locations is specified as an argument), and return a pointer that points to the beginning of the allocated memory (e.g., the pointer points to the beginning of the allocated block of memory locations). In some contexts, multiple processes may be executing at the same time on a processor of a computing device, and each process may have access to a shared region of memory of the processor. Malicious code may be inserted into high level source code and machine, and potentially other program representations code by an adversary or an attack on the computing device. The malicious code may seek to access a region of memory (either specific to a single process or shared by multiple processes) that the original source code of that process did not seek to access, or did not have access to. Alternatively, the original source code may have been authored in part or in whole by an adversary seeking to compromise the security of other services running on the same platform that runs the malicious code by seeking to perform unauthorized memory accesses.